logo icon
ธนินัชดอทคอม - รับสร้าง Website, Mobile Application
image

บทความ

ธนินัช ดอทคอม - ผู้เชี่ยวชาญทำเว็บไซต์

Session และ Cookie ใน Yii2

Session และ Cookie เป็นเครื่องมือสำหรับเก็บข้อมูลของผู้ใช้บนเว็บไซต์ โดยสามารถใช้งานได้ง่าย ๆ โดยไม่ต้องเก็บข้อมูลลงในฐานข้อมูล

Session เป็นการเก็บข้อมูลของผู้ใช้บนเว็บไซต์ไว้ในเซิร์ฟเวอร์ โดยข้อมูลจะถูกเก็บไว้ในแฟ้มข้อมูลเซสชัน ผู้ใช้สามารถเข้าถึงข้อมูลได้ทุกครั้งที่เข้าใช้งานเว็บไซต์ โดยเซิร์ฟเวอร์จะตรวจสอบว่ามีเซสชันของผู้ใช้หรือไม่ หากมีเซสชันแล้วเซิร์ฟเวอร์จะใช้ข้อมูลในเซสชันเดิม แต่หากไม่มีเซสชันเดิมจะสร้างเซสชันใหม่และเก็บข้อมูลลงในแฟ้มข้อมูลเซสชันใหม่

ตัวอย่างการใช้งาน Session ด้วย PHP

<?php // Start the session session_start(); // Set session variables $_SESSION["username"] = "John"; $_SESSION["favcolor"] = "blue"; echo "Session variables are set."; ?>

โดยเมื่อผู้ใช้เข้าใช้งานเว็บไซต์ในครั้งต่อไป Session จะทำการตรวจสอบว่ามี Session ของผู้ใช้หรือไม่ และใช้ข้อมูลเดิมหากมี Session ของผู้ใช้ หากไม่มี Session จะสร้าง Session ใหม่และเก็บข้อมูลลงใน Session ใหม่

Cookie เป็นการเก็บข้อมูลของผู้ใช้บนเครื่องคอมพิวเตอร์ของผู้ใช้ โดยข้อมูลจะถูกเข้ารหัสและเก็บไว้ในไฟล์เอกสารเครื่องหนึ่ง และผู้ใช้สามารถเข้าถึงข้อมูลได้ทุกครั้งที่เข้าใช้งานเว็บไซต์

ตัวอย่างการใช้งาน Cookie ด้วย PHP

<?php // Set cookie setcookie("username", "John", time() + (86400 * 30), "/"); // expires in 30 days // Retrieve cookie value echo $_COOKIE["username"]; ?>

โดยการใช้งาน Cookie จะมีการกำหนดชื่อของ Cookie และค่าของ Cookie โดยใช้ฟังก์ชัน setcookie() และกำหนดเวลาที่ Cookie จะหมดอายุ ในที่นี้คือ 30 วัน โดยค่าของ Cookie จะถูกเข้ารหัสและเก็บไว้ในเครื่องคอมพิวเตอร์ของผู้ใช้ และผู้ใช้สามารถเข้าถึงข้อมูลดังกล่าวได้โดยใช้ตัวแปร $_COOKIE

สรุป:

Session และ Cookie เป็นเครื่องมือสำหรับเก็บข้อมูลของผู้ใช้บนเว็บไซต์ โดย Session จะเก็บข้อมูลของผู้ใช้บนเซิร์ฟเวอร์ และ Cookie จะเก็บข้อมูลของผู้ใช้บนเครื่องคอมพิวเตอร์ของผู้ใช้ การใช้งานทั้งสองนี้มีความสำคัญในการจัดการข้อมูลของผู้ใช้ในเว็บไซต์และโปรแกรมอื่น ๆ ที่ทำงานอยู่บนเว็บไซต์นั้น ๆ

Session ใน Yii2 อธิบายพร้อมยกตัวอย่าง

ใน Yii2 เราสามารถใช้ Session ในการเก็บข้อมูลของผู้ใช้ได้ โดยใช้คลาส yii\web\Session ซึ่งเป็นคลาสที่ถูกสร้างขึ้นมาเพื่อใช้งาน Session ใน Yii2

การใช้งาน Session ใน Yii2 สามารถทำได้ดังนี้

  1. เรียกใช้งาน Session
<?php // Call session $session = Yii::$app->session; // Start session if it's not started yet if (!$session->isActive) { $session->open(); } ?>
  1. กำหนดค่า Session ด้วย $session ดังนี้
<?php // Set session $session->set('username', 'John Doe'); ?>
  1. อ่านค่าของ Session ด้วย $session ดังนี้
<?php // Get session value echo $session->get('username'); ?>
  1. ลบค่า Session ด้วย $session ดังนี้
<?php // Remove session $session->remove('username'); ?>

ตัวอย่างการใช้งาน Session ใน Yii2 ดังกล่าวจะเก็บข้อมูลของผู้ใช้ในตัวแปร Session ภายในเซสชัน โดยเซสชันจะถูกเริ่มต้นขึ้นเมื่อผู้ใช้เข้าสู่ระบบ และจะถูกเก็บไว้ภายในเซสชันไปจนกว่าผู้ใช้จะออกจากระบบ

สรุป: การใช้งาน Session ใน Yii2 เป็นการเก็บข้อมูลของผู้ใช้ในตัวแปร Session ภายในเซสชัน โดยเซสชันจะถูกเริ่มต้นขึ้นเมื่อผู้ใช้เข้าสู่ระบบ และจะถูกเก็บไว้ภายในเซสชันไปจนกว่าผู้ใช้จะออกจากระบบ

ตัวอย่างการใช้งาน Session ใน Yii2 เพื่อเก็บข้อมูลสถานะการเข้าสู่ระบบของผู้ใช้ ดังนี้

  1. เรียกใช้งาน Session และกำหนดค่าเริ่มต้น
<?php // Call session $session = Yii::$app->session; // Start session if it's not started yet if (!$session->isActive) { $session->open(); } // Set default user status if (!isset($session['isUserLoggedIn'])) { $session['isUserLoggedIn'] = false; } ?>
  1. เมื่อผู้ใช้เข้าสู่ระบบสำเร็จ กำหนดค่า $session ให้เป็น true
<?php // Login user if ($user->login()) { $session['isUserLoggedIn'] = true; } ?>
  1. เมื่อผู้ใช้ออกจากระบบ กำหนดค่า $session ให้เป็น false
<?php // Logout user $session['isUserLoggedIn'] = false; $user->logout(); ?>
  1. ตรวจสอบสถานะการเข้าสู่ระบบของผู้ใช้
<?php // Check if user is logged in if ($session['isUserLoggedIn']) { // Show user profile } else { // Show login form } ?>

ตัวอย่างการใช้งาน Session ใน Yii2 เพื่อเก็บข้อมูลสถานะการเข้าสู่ระบบของผู้ใช้ จะเก็บข้อมูลสถานะการเข้าสู่ระบบของผู้ใช้ในตัวแปร Session และตรวจสอบค่าเพื่อแสดงหน้าเว็บไซต์ที่เหมาะสมกับสถานะการเข้าสู่ระบบของผู้ใช้

สรุป: การใช้งาน Session ใน Yii2 เพื่อเก็บข้อมูลสถานะการเข้าสู่ระบบของผู้ใช้ เป็นวิธีที่มีประสิทธิภาพสูงและเป็นที่นิยมในการจัดการสถานะการเข้าสู่ระบบของผู้ใช้ใน Yii2 ด้วยความสะดวกและประสิทธิภาพที่มากกว่าการใช้งาน Cookie

Cookie  ใน Yii2 อธิบายพร้อมยกตัวอย่าง

Cookie เป็นเทคโนโลยีในการเก็บข้อมูลบนเว็บเบราว์เซอร์ของผู้ใช้ โดยจะเก็บข้อมูลในรูปแบบของชุดคีย์และค่า (key-value pairs) ซึ่งจะถูกส่งไปยังเซิร์ฟเวอร์ทุกครั้งที่ผู้ใช้ทำการร้องขอหน้าเว็บไซต์

การตั้งค่า Cookie สามารถทำได้ดังนี้

  1. ตั้งค่าค่าโดเมนของ Cookie ด้วย domain
<?php // Set cookie domain setcookie('username', 'John Doe', time() + (86400 * 30), '/', 'example.com'); ?>
  1. ตั้งค่าพาธของ Cookie ด้วย path
<?php // Set cookie path setcookie('username', 'John Doe', time() + (86400 * 30), '/admin'); ?>

ตัวอย่างการตั้งค่า Cookie ด้วย domain และ path ใน PHP ดังกล่าวจะกำหนดให้ Cookie ที่ชื่อว่า username มีอายุเป็น 30 วัน และจะสามารถอ่านได้จากทุกพาธที่อยู่ภายใต้โดเมน example.com และพาธ /admin เท่านั้น

สรุป: การตั้งค่า Cookie สามารถใช้ domain และ path เพื่อกำหนดขอบเขตของ Cookie และสามารถตั้งค่าได้ในภาษา PHP โดยใช้ฟังก์ชัน setcookie() ที่รองรับการตั้งค่าเพิ่มเติมและอื่น ๆ อีกมากมาย

Cookie ใน Yii2 อธิบายพร้อมยกตัวอย่าง

ใน Yii2 สามารถใช้คลาส yii\web\Cookie เพื่อจัดการกับ Cookie ได้ง่ายๆ โดยมีเมทอดสำคัญดังนี้

  1. yii\web\Cookie::set() - ใช้สำหรับตั้งค่าค่าของ Cookie
  2. yii\web\Cookie::get() - ใช้สำหรับอ่านค่าของ Cookie
  3. yii\web\Cookie::expire - ใช้สำหรับกำหนดเวลาหมดอายุของ Cookie

ตัวอย่างการตั้งค่า Cookie ด้วยคลาส yii\web\Cookie ใน Yii2 ดังนี้

<?php use yii\web\Cookie; // Set a cookie $cookie = new Cookie([ 'name' => 'username', 'value' => 'John Doe', 'expire' => time() + 86400 * 30, // 30 days ]); Yii::$app->response->cookies->add($cookie); // Get a cookie $username = Yii::$app->request->cookies->getValue('username'); ?>

ในตัวอย่างดังกล่าว เราใช้ $cookie ในการตั้งค่า Cookie ที่มีชื่อว่า username และมีค่าเป็น John Doe โดย Cookie นี้จะหมดอายุใน 30 วัน และถูกเพิ่มลงในการตอบกลับด้วย $app->response->cookies ซึ่งเป็นอ็อบเจกต์ของ yii\web\Response ส่วนการอ่านค่า Cookie เราใช้ $app->request->cookies ซึ่งเป็นอ็อบเจกต์ของ yii\web\Request

สรุป: ใน Yii2 สามารถใช้คลาส yii\web\Cookie เพื่อจัดการกับ Cookie ได้ง่ายๆ โดยใช้เมทอด set() เพื่อตั้งค่า Cookie และ get() เพื่ออ่านค่า Cookie และ expire เพื่อกำหนดเวลาหมดอายุของ Cookie ซึ่งสามารถเพิ่มลงในการตอบกลับด้วย $app->response->cookies และอ่านค่าด้วย $app->request->cookies

การใช้งาน Cookie ใน Yii2 สามารถนำมาใช้ในงานต่างๆ ได้ เช่น

  1. การจดจำค่าต่างๆ ของผู้ใช้ เช่น การจดจำภาษาที่ผู้ใช้เลือกใช้ เพื่อแสดงเนื้อหาในภาษาเดียวกันทุกครั้งที่ผู้ใช้เข้าชมเว็บไซต์
  2. การเก็บค่าสถานะของผู้ใช้ เช่น การเก็บค่าการล็อกอินของผู้ใช้ เพื่อให้ไม่ต้องล็อกอินใหม่ทุกครั้งที่เข้าชมเว็บไซต์
  3. การติดตามการใช้งานของผู้ใช้ เช่น การติดตามประวัติการเรียกใช้หน้าเว็บไซต์ต่างๆ เพื่อปรับปรุงประสิทธิภาพและประสิทธิผลของเว็บไซต์

ตัวอย่างการใช้งาน Cookie ใน Yii2 สำหรับการจดจำภาษาที่ผู้ใช้เลือกใช้ เพื่อแสดงเนื้อหาในภาษาเดียวกันทุกครั้งที่ผู้ใช้เข้าชมเว็บไซต์ ดังนี้

<?php use Yii; use yii\web\Cookie; class LanguageController extends Controller { public function actionSetLanguage($language) { // Set language cookie $cookie = new Cookie([ 'name' => 'language', 'value' => $language, 'expire' => time() + 86400 * 30, // 30 days ]); Yii::$app->response->cookies->add($cookie); // Redirect back to previous page return $this->redirect(Yii::$app->request->referrer ?: Yii::$app->homeUrl); } }

ในตัวอย่างดังกล่าว เมื่อผู้ใช้เลือกภาษาที่ต้องการใช้งาน ระบบจะตั้งค่า Cookie ชื่อว่า language ซึ่งมีค่าเท่ากับภาษาที่ผู้ใช้เลือก และจะหมดอายุใน 30 วัน 

การตั้งค่าอายุของ Cookie นั้นจะทำได้โดยการกำหนดค่า parameter expires ในฟังก์ชัน setcookie() โดยค่านี้จะระบุเวลาที่ Cookie จะหมดอายุ โดยกำหนดเป็นจำนวนวินาทีตั้งแต่เวลา Unix Epoch (1 มกราคม ค.ศ. 1970) จนถึงเวลาที่ต้องการให้หมดอายุ ดังนั้นถ้าต้องการให้ Cookie หมดอายุใน 30 วัน จะต้องกำหนดค่า expires ดังนี้

$expires = time() + (30 * 24 * 60 * 60); // 30 วัน setcookie("mycookie", "myvalue", $expires);

ในตัวอย่างด้านบน ตัวแปร $expires จะถูกกำหนดค่าเป็นจำนวนวินาทีที่ผ่านมาตั้งแต่เวลา Unix Epoch (1 มกราคม ค.ศ. 1970) บวกด้วย 30 วัน (คูณ 24 ชั่วโมง คูณ 60 นาที คูณ 60 วินาที) เพื่อกำหนดเวลาที่ Cookie จะหมดอายุ

อย่างไรก็ตาม การตั้งค่าอายุของ Cookie นั้นมีข้อจำกัดบางอย่าง เช่น อาจมีการปรับเปลี่ยนเวลาในเครื่องผู้ใช้งาน ซึ่งอาจทำให้ Cookie หมดอายุก่อนเวลาที่กำหนดไว้ นอกจากนี้ ผู้ใช้งานยังสามารถลบ Cookie ได้ด้วย ดังนั้นการใช้งาน Cookie ควรคำนึงถึงความเป็นไปได้ที่จะเกิดข้อผิดพลาดในการกำหนดเวลาหมดอายุของ Cookie

เพื่อให้เว็บไซต์สามารถอ่านค่า Cookie ที่ตั้งค่าไว้ในเครื่องของผู้ใช้ได้ สามารถใช้เมธอด getCookies() ของออบเจ็กต์ yii\web\Request เพื่อดึงข้อมูล Cookie ออกมาใช้งานได้ ดังนี้

<?php use Yii; class SiteController extends Controller { public function actionIndex() { // Get language cookie $language = Yii::$app->request->cookies->get('language'); // Set default language if cookie not set if ($language === null) { $language = 'en'; // default language } // Set application language Yii::$app->language = $language; return $this->render('index'); } }

ในตัวอย่างดังกล่าว เมื่อผู้ใช้เข้าชมหน้าเว็บไซต์ ระบบจะดึงค่า Cookie ชื่อว่า language ออกมา โดยใช้เมธอด get() ของออบเจ็กต์ yii\web\CookieCollection และกำหนดภาษาที่ต้องการใช้งานในแอพพลิเคชัน Yii2 ด้วยเมธอด setLanguage() ของออบเจ็กต์ yii\web\Application

อย่างไรก็ตาม การใช้งาน Cookie หรือ Session ไม่เหมาะสมกับงานที่เกี่ยวข้องกับความปลอดภัยของข้อมูล เนื่องจากข้อมูลจะถูกเก็บไว้ในเครื่องของผู้ใช้ ซึ่งอาจทำให้มีผู้ไม่หวังดีนำข้อมูลไปใช้งานในทางที่ไม่เหมาะสม

ดังนั้น ในการออกแบบและพัฒนาระบบที่มีความปลอดภัยสูง ควรใช้วิธีการเก็บข้อมูลที่เป็น Secure Storage เช่น Database หรือ File System แทนการใช้งาน Cookie หรือ Session โดยตรง โดยมีการเข้ารหัสข้อมูลและใช้ Secure Communication เพื่อความปลอดภัยของข้อมูลตลอดจนการส่งผ่านข้อมูลระหว่างเครื่องของผู้ใช้และเซิร์ฟเวอร์

อีกหนึ่งเหตุผลที่ Cookie หรือ Session ไม่เหมาะสมกับงานที่ต้องการให้ผู้ใช้งานสามารถเข้าถึงข้อมูลได้ทุกเครื่อง เนื่องจากข้อมูลจะถูกเก็บไว้ในเครื่องของผู้ใช้งาน และข้อมูลต่าง ๆ ใน Session นั้นไม่สามารถเข้าถึงได้จากเครื่องอื่น ๆ หรือผู้ใช้งานที่ไม่ได้เข้าสู่ระบบเดียวกัน

หากต้องการให้ผู้ใช้งานสามารถเข้าถึงข้อมูลได้ทุกเครื่อง สามารถใช้เทคโนโลยีเก็บข้อมูลแบบ Centralized Storage เช่น Database หรือ Cloud Storage แทนการใช้งาน Cookie หรือ Session โดยตรง โดยผู้ใช้งานจะต้องเข้าสู่ระบบด้วยชื่อผู้ใช้และรหัสผ่าน และข้อมูลจะถูกเก็บไว้ในฐานข้อมูลหรือพื้นที่เก็บข้อมูลบน Cloud ซึ่งสามารถเข้าถึงได้จากทุกเครื่องที่ผู้ใช้งานเข้าใช้งานได้ ดังนั้นจึงเหมาะสมกับงานที่ต้องการให้ผู้ใช้งานสามารถเข้าถึงข้อมูลได้ทุกเครื่อง

อีกหนึ่งเหตุผลที่ Cookie หรือ Session ไม่เหมาะสมกับงานที่ต้องการเก็บข้อมูลตลอดเวลาหรือเก็บข้อมูลที่มีอายุการใช้งานยาวนาน คือ Cookie และ Session มีขนาดจำกัดในการเก็บข้อมูล ซึ่งอาจไม่เพียงพอต่อการเก็บข้อมูลที่มีขนาดใหญ่หรืออายุการใช้งานยาวนาน เช่น ข้อมูลสำหรับการเข้าสู่ระบบที่ต้องการใช้งานตลอดเวลา หรือข้อมูลการเข้าใช้งานระบบของผู้ใช้งานที่ต้องการเก็บไว้เพื่อวิเคราะห์และประมวลผลในภายหลัง

หากต้องการเก็บข้อมูลตลอดเวลาหรือเก็บข้อมูลที่มีอายุการใช้งานยาวนาน สามารถใช้เทคโนโลยีเก็บข้อมูลแบบ Persistent Storage เช่น Database หรือ File System แทนการใช้งาน Cookie หรือ Session โดยตรง โดยสามารถเก็บข้อมูลได้โดยไม่จำกัดขนาด และมีความยืดหยุ่นในการจัดการข้อมูลให้เหมาะสมกับความต้องการของระบบ ดังนั้นจึงเหมาะสมกับงานที่ต้องการเก็บข้อมูลตลอดเวลาหรือเก็บข้อมูลที่มีอายุการใช้งานยาวนาน

อีกหนึ่งเหตุผลที่ Cookie หรือ Session ไม่เหมาะสมกับงานที่ต้องการความปลอดภัยของข้อมูลสูง คือการเก็บข้อมูลใน Cookie หรือ Session อาจเป็นเป้าหมายของผู้ไม่หวังดีที่ต้องการเข้าถึงข้อมูลที่อยู่ใน Cookie หรือ Session นั้น และอาจเป็นช่องโหว่ในการเข้าถึงข้อมูลสำคัญของผู้ใช้งาน เช่น ข้อมูลการเข้าสู่ระบบ หรือข้อมูลการทำธุรกรรมทางการเงิน ซึ่งอาจเป็นอันตรายต่อความปลอดภัยของผู้ใช้งาน

หากต้องการความปลอดภัยของข้อมูลสูง สามารถใช้เทคโนโลยีเข้ารหัส (Encryption) เพื่อเข้ารหัสข้อมูลที่จะเก็บไว้ หรือใช้เทคโนโลยีแบบ Token ซึ่งเป็นการเก็บข้อมูลแบบหมุนเวียน โดยจะมีการสร้าง Token ขึ้นมาเพื่อใช้เป็นตัวบอกตนของผู้ใช้งาน โดยข้อมูลจะถูกเก็บไว้ในฐานข้อมูลหรือพื้นที่เก็บข้อมูลบน Cloud ซึ่งสามารถเข้าถึงได้โดยผู้ใช้งานที่มีสิทธิ์เท่านั้น ดังนั้นจึงเหมาะสมกับงานที่ต้องการความปลอดภัยของข้อมูลสูง

ในการออกแบบระบบเก็บข้อมูลสำหรับงานประเภทที่ต้องการเก็บข้อมูลตลอดเวลาหรือเก็บข้อมูลที่มีอายุการใช้งานยาวนาน และต้องการความปลอดภัยของข้อมูลสูง เราสามารถใช้ฐานข้อมูล (Database) เพื่อเก็บข้อมูลแทน Cookie หรือ Session ได้ ซึ่งฐานข้อมูลจะเป็นส่วนหนึ่งของระบบซอฟต์แวร์ และจะมีการเข้ารหัสข้อมูลเพื่อเพิ่มความปลอดภัย

การใช้งานฐานข้อมูลสามารถสร้างขึ้นมาได้ด้วยหลายภาษาโปรแกรมต่างๆ เช่น PHP, Python, Java ฯลฯ โดยใช้ Framework หรือ Library ต่างๆ เช่น Laravel, Django, Spring ฯลฯ ในการเขียนโปรแกรม ซึ่งฐานข้อมูลสามารถเก็บข้อมูลที่มีขนาดใหญ่ และมีความยืดหยุ่นในการจัดการข้อมูลให้เหมาะสมกับความต้องการของระบบ

ยกตัวอย่างการใช้งานฐานข้อมูลในงานต่างๆ เช่น ในระบบเว็บไซต์อีคอมเมิร์ซ ฐานข้อมูลจะถูกใช้งานเพื่อเก็บข้อมูลการสั่งซื้อสินค้าของลูกค้า ในระบบเว็บไซต์แชทหรือแอปพลิเคชันการสื่อสาร ฐานข้อมูลจะถูกใช้งานเพื่อเก็บข้อมูลการสนทนาระหว่างผู้ใช้งาน หรือในระบบธุรกรรมทางการเงินธุรกิจ ฐานข้อมูลจะถูกใช้งานเพื่อเก็บข้อมูลการทำธุรกรรมทางการเงินของลูกค้า 

หนังสือพัฒนาตัวเอง

จุดเริ่มต้นที่ชัดเจน

เว็บไซต์หรือแอปพลิเคชั่นของคุณเริ่มต้นที่นี่

ลงทะเบียนแล้วเราจะส่งข้อเสนอที่ดีที่สุดให้กับคุณ